package main

import "fmt"

/*
作业1:
升级随机点名系统：
可以无限次数的按任意键进行抽取，按q退出
抽到的人，不需要再参与点名抽取

作业2：
使用go语言实现5行5列盘龙数组
例：2行2列
1 2
3 4
*/

func main() {
	//作业1 -- 升级版随机点名系统
	//定义一个人员名单列表，随机抽取一个人来回答问题。随机库 -- random
	//student := []string{"同学1", "同学2", "同学3", "同学4", "同学5"}
	//var anything string
	//for {
	//	fmt.Println("按键盘键进行点名，按q退出")
	//	fmt.Scan(&anything)
	//	if anything == "q" {
	//		fmt.Println("点名结束！")
	//		break
	//	} else {
	//		// 设置随机种子，保证每次运行的随机数都不一样
	//		rand.Seed(time.Now().UnixNano()) //把时间戳作为随机种子
	//		x := rand.Intn(len(student))
	//		fmt.Printf("抽取的同学为：%s\n", student[x])
	//		student = append(student[:x], student[x+1:]...) //删除点名过的学生
	//		fmt.Println("*******************************")
	//		if len(student) == 0 { //都点完了
	//			fmt.Println("点名结束！")
	//			break
	//		}
	//	}
	//}

	//作业2
	rows, cols := 4, 4
	// 创建盘龙数组
	spiralArray := createSpiralArray(rows, cols)
	// 打印盘龙数组
	printArray(spiralArray)
}

// 创建盘龙数组
func createSpiralArray(rows, cols int) [][]int {
	//初始化
	array := make([][]int, rows)
	for i := range array {
		array[i] = make([]int, cols)
	}

	counter := 1 // 总共有几个数字
	startRow, endRow, startCol, endCol := 0, rows-1, 0, cols-1

	for counter <= rows*cols {
		// 从左到右
		for i := startCol; i <= endCol; i++ {
			array[startRow][i] = counter
			counter++
		}
		startRow++

		// 从上到下
		for i := startRow; i <= endRow; i++ {
			array[i][endCol] = counter
			counter++
		}
		endCol--

		// 从右到左
		for i := endCol; i >= startCol; i-- {
			array[endRow][i] = counter
			counter++
		}
		endRow--

		// 从下到上
		for i := endRow; i >= startRow; i-- {
			array[i][startCol] = counter
			counter++
		}
		startCol++
	}

	return array
}

// 打印数组
func printArray(array [][]int) {
	for _, row := range array {
		for _, value := range row {
			fmt.Printf("%2d ", value)
		}
		fmt.Println()
	}
}
